package com.cskaoyan.javase.oop2.homework1;

/**
 * @description: 作业第三题
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 3，定义一个Student类，并要求其他类在使用Student类的时候，最多只能创建10个Student类的对象，如何实现？
 *    提示：  首先，要实现该功能，就不能让外部类直接使用
 *            new Student(...)的方式来创建对象，如何不能让其他类new Student(...)，
 *   	只需将Student类的构造方法的，权限改为private即可。
 *     接着，把创建对Student对象的工作，交给一个专门的方法去做(想想这个方法应该是怎样的方法)
 *
 *
 */
public class Work3 {
    public static void main(String[] args) {
        for (int i = 0; i < 13; i++) {
            Student.getStudent();
        }
    }
}

class Student {
    private static int count = 1;
    //最多只能创建10个Student类的对象
    //思考：如果这个类的构造方法是public的，你能控制它创建多少次对象吗？
    //所以第一步立刻马上私有化构造方法
    private Student() {
    }
    //私有化构造方法后，外部就真得不能创建对象，于是我们想创建对象，只能在内部创建对象，并返回该对象
    //我只能够创建十次对象，这里既然是十次，所以需要一个计数器来指示当前类创建了多少次对象
    //计数器应该用什么去做？定义普通成员变量是不可以的，因为普通成员变量是对象所有的，每创建一次对象都有一个新的
    //所以这个count必须是类所有的，全体对象共享的
    public static Student getStudent() {
        //判断count次数
        if (Student.count <= 10) {
            //这个时候仍然可以创建对象
            Student s = new Student();
            System.out.println("这是第" + count + "次创建对象,该对象是" + s);
            count++;
            return s;
        }
        else {
            System.out.println("无法创建对象！次数超出了");
            return null;
        }
    }
}